package com.example.meservice.controller;

import cn.hutool.core.util.RandomUtil;
import com.example.meservice.domain.vo.registerVo;
import com.example.meservice.utils.MailUtil;
import com.example.meservice.utils.Result;
import jakarta.annotation.Resource;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

import java.time.Duration;
import java.time.temporal.ChronoUnit;

/**
 * 邮件服务控制器
 * 提供邮箱验证码相关功能
 *
 * @author czwa
 */
@RestController
public class mailController {

    @Resource
    private StringRedisTemplate stringRedisTemplate;

    /**
     * 获取邮箱验证码
     * 生成6位随机数字验证码，发送到指定邮箱并缓存到Redis
     *
     * @param registerVo 包含目标邮箱的注册视图对象
     * @return 操作结果，成功或失败信息
     */
    @PostMapping("/getCode")
    public Result mail(@RequestBody registerVo registerVo) {
        System.out.println(registerVo);

        // 获取目标邮箱
        String targetEmail = registerVo.getEmail();

        // 校验邮箱格式
        if (targetEmail == null || !targetEmail.matches("^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\\.[a-zA-Z0-9_-]+)+$")) {
            return Result.error("邮箱格式不正确");
        }

        // 校验是否为QQ邮箱（业务限制）
        if (!targetEmail.endsWith("@qq.com")) {
            return Result.error("仅支持 QQ 邮箱");
        }

        // 生成6位随机数字验证码
        String authCode = RandomUtil.randomNumbers(6);

        // 检查是否已发送验证码（避免重复发送）
        if (stringRedisTemplate.opsForValue().get("authCode:" + targetEmail) != null) {
            return Result.error("请勿重复获取验证码");
        }

        // 将验证码存入Redis，有效期3分钟
        stringRedisTemplate.opsForValue().set("authCode:" + targetEmail, authCode, Duration.of(3, ChronoUnit.MINUTES));

        // 调用邮件工具类发送验证码
        MailUtil.sendEmailCode(targetEmail, authCode);

        return Result.success();
    }
}